package inits

import (
	"fmt"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"gorm.io/gorm/logger"
	"time"
	"www.bwbdim.com/config"
	"www.bwbdim.com/global"
)

func InitMysql() {
	var err error

	global.MySqlDB, err = gorm.Open(mysql.Open(
		fmt.Sprintf(
			"%s:%s@tcp(%s:%d)/%s",
			config.AppConfig.Mysql.Username,
			config.AppConfig.Mysql.Password,
			config.AppConfig.Mysql.Host,
			config.AppConfig.Mysql.Port,
			config.AppConfig.Mysql.Databases,
		),
	),
		&gorm.Config{
			SkipDefaultTransaction: true,                                  // 关闭默认事务（批量写入无需事务时）
			DisableAutomaticPing:   true,                                  // 关闭自动Ping检查（减少额外开销）
			Logger:                 logger.Default.LogMode(logger.Silent), // 关闭日志（写入阶段减少IO）
		},
	)
	if err != nil {
		fmt.Println(err)
		panic("数据库连接失败")
		return
	}

	sqlDB, _ := global.MySqlDB.DB()
	sqlDB.SetMaxOpenConns(16)                  // 最大打开连接数：100
	sqlDB.SetMaxIdleConns(8)                   // 最大空闲连接数：20
	sqlDB.SetConnMaxLifetime(5 * time.Minute)  // 连接最大存活时间：3小时
	sqlDB.SetConnMaxIdleTime(30 * time.Minute) // 空闲连接最大存活时间：30分钟
}
